<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>内存溢出与内存泄露</title>
</head>
<body>
    
<!-- 
    1. 内存溢出
        - 一种程序运行出现的错误
        - 当程序运行需要的内存超过了剩余的内存时，就会抛出内存溢出的错误
    2. 内存泄露
        - 占用的内存没有及时释放
        - 内存泄露积累多了就会容易导致内存溢出
        - 常见的内存泄露：
            1. 意外的全局变量
            2. 没有及时清理的计算器或回调函数
            3. 闭包

 -->

<script type="text/javascript">
    // 1. 内存溢出
    var obj = {}
    for(var i =0; i<1000; i++){
        obj[i] = new Array(10000)

    }

    // 2. 内存泄漏

    // 意外的全局变量
    function fn(){
        a = new Array(10000)
        console.log(a)
    }
    fn()

    // 没有及时清理的计算器或回调函数
    var intervalId = setInterval(function(){
        console.log('----')
    },1000)

    clearInterval(intervalId)

    // 闭包
    function fn1(){
        var a = 4 
        function fn2(){
            console.log(++a)
        }
        return fn2
    }
    var f = fn1()
    f()

    // f = null
</script>
</body>
</html>